package com.ruoyi.common.customize.enums;

import lombok.AllArgsConstructor;
import lombok.Getter;

/**
 * 通用字典枚举类
 *
 * @author gdk
 * @since 2022/8/12 16:23
 */
public enum CommonDictEnum {
    ;

    /**
     * 是/否 (0否、1是)
     */
    @Getter
    @AllArgsConstructor
    public enum YesOrNo {
        /**
         * 0否
         */
        NO("否", "0"),
        /**
         * 1是
         */
        YES("是", "1");

        private final String name;
        private final String value;

        /**
         * 根据name查找对应value
         *
         * @param name 枚举名称
         * @return java.lang.String
         * @author gdk
         * @since 2021/11/14
         */
        public static String findValue(String name) {
            for (YesOrNo item : values()) {
                if (item.getName().equals(name)) {
                    return item.getValue();
                }
            }

            return null;
        }

        /**
         * 根据value查找对应的name
         *
         * @param value 枚举值
         * @return java.lang.String
         * @author gdk
         * @since 2021/11/14
         */
        public static String findName(String value) {
            for (YesOrNo item : values()) {
                if (item.getValue().equals(value)) {
                    return item.getName();
                }
            }

            return null;
        }
    }


    /**
     * 状态 （0启用、1停用）
     */
    @Getter
    @AllArgsConstructor
    public enum Status {
        /**
         * 0停用
         */
        DEPRECATED("停用", "0"),
        /**
         * 1启用
         */
        NORMAL("启用", "1");

        private final String name;
        private final String value;

        /**
         * 根据name查找对应value
         *
         * @param name 枚举名称
         * @return java.lang.String
         * @author gdk
         * @since 2021/11/14
         */
        public static String findValue(String name) {
            for (Status item : values()) {
                if (item.getName().equals(name)) {
                    return item.getValue();
                }
            }

            return null;
        }

        /**
         * 根据value查找对应的name
         *
         * @param value 枚举值
         * @return java.lang.String
         * @author gdk
         * @since 2021/11/14
         */
        public static String findName(String value) {
            for (Status item : values()) {
                if (item.getValue().equals(value)) {
                    return item.getName();
                }
            }

            return null;
        }
    }

    /**
     * 是否删除 （0否、null是）
     */
    @Getter
    @AllArgsConstructor
    public enum IsDeleted {
        /**
         * 0否
         */
        NO("否", "0"),
        /**
         * null是
         */
        YES("是", null);

        private final String name;
        private final String value;

        /**
         * 根据name查找对应value
         *
         * @param name 枚举名称
         * @return java.lang.String
         * @author gdk
         * @since 2021/11/14
         */
        public static String findValue(String name) {
            for (IsDeleted item : values()) {
                if (item.getName().equals(name)) {
                    return item.getValue();
                }
            }

            return null;
        }

        /**
         * 根据value查找对应的name
         *
         * @param value 枚举值
         * @return java.lang.String
         * @author gdk
         * @since 2021/11/14
         */
        public static String findName(String value) {
            for (IsDeleted item : values()) {
                if (item.getValue() == null) {
                    if (value == null) {
                        return item.getName();
                    }

                } else if (item.getValue().equals(value)) {
                    return item.getName();
                }
            }

            return null;
        }
    }

    /**
     * 计算类型（0加、1减、2乘、3除）
     */
    @Getter
    @AllArgsConstructor
    public enum CalculationType {
        ADD("加", "0"),
        MINUS("减", "1"),
        MULTIPLY("乘", "2"),
        DIVIDE("除", "3");

        private final String name;
        private final String value;

        /**
         * 根据name查找对应value
         *
         * @param name 枚举名称
         * @return java.lang.String
         * @author gdk
         * @since 2021/11/14
         */
        public static String findValue(String name) {
            for (CalculationType item : values()) {
                if (item.getName().equals(name)) {
                    return item.getValue();
                }
            }

            return null;
        }

        /**
         * 根据value查找对应的name
         *
         * @param value 枚举值
         * @return java.lang.String
         * @author gdk
         * @since 2021/11/14
         */
        public static String findName(String value) {
            for (CalculationType item : values()) {
                if (item.getValue().equals(value)) {
                    return item.getName();
                }
            }

            return null;
        }
    }

    /**
     * 用户类型（user用户、manager管理）
     */
    @Getter
    @AllArgsConstructor
    public enum UserType {
        USER("用户", "user"),
        MANAGER("管理", "manager");

        private final String name;
        private final String value;

        /**
         * 根据name查找对应value
         *
         * @param name 枚举名称
         * @return java.lang.String
         * @author gdk
         * @since 2021/11/14
         */
        public static String findValue(String name) {
            for (UserType item : values()) {
                if (item.getName().equals(name)) {
                    return item.getValue();
                }
            }

            return null;
        }

        /**
         * 根据value查找对应的name
         *
         * @param value 枚举值
         * @return java.lang.String
         * @author gdk
         * @since 2021/11/14
         */
        public static String findName(String value) {
            for (UserType item : values()) {
                if (item.getValue().equals(value)) {
                    return item.getName();
                }
            }

            return null;
        }
    }
}
